﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FortuneCat.WebUI.Models;
using System.Text;

namespace FortuneCat.WebUI.HtmlHelpers {
    public static class PagingHelpers {
        public static MvcHtmlString PageLinks(this HtmlHelper html,
            PagingInfo pagingInfo, Func<int, string> pageUrl) {

            StringBuilder result = new StringBuilder();
            if (pagingInfo.TotalPages > 1) {
                int beginPage = Math.Max(pagingInfo.CurrentPage - (pagingInfo.VisiblePages / 2), 2);
                int endPage = Math.Min(pagingInfo.CurrentPage + (pagingInfo.VisiblePages / 2), pagingInfo.TotalPages - 1);

                TagBuilder tagOuter = new TagBuilder("div");
                tagOuter.AddCssClass("pager");

                TagBuilder tag = null;

                // 上一页
                if (pagingInfo.CurrentPage > 1) {
                    tag = new TagBuilder("a");
                    tag.AddCssClass("button");
                    tag.AddCssClass("ui-corner-all");
                    tag.MergeAttribute("href", pageUrl(pagingInfo.CurrentPage - 1));
                    tag.InnerHtml = "上一页";
                    result.AppendLine(tag.ToString());
                }

                // 首页
                tag = new TagBuilder("a");
                tag.AddCssClass("button");
                tag.AddCssClass("ui-corner-all");
                if (pagingInfo.CurrentPage == 1) {
                    tag.AddCssClass("selected");
                }
                else {
                    tag.MergeAttribute("href", pageUrl(1));
                }
                tag.InnerHtml = "1";
                result.AppendLine(tag.ToString());

                // ...
                if (beginPage - 1 > 1) {
                    tag = new TagBuilder("a");
                    tag.AddCssClass("button");
                    tag.AddCssClass("ui-corner-all");
                    tag.MergeAttribute("href", pageUrl(beginPage - 1));
                    tag.InnerHtml = "...";
                    result.AppendLine(tag.ToString());
                }

                // 中间页码
                for (int i = beginPage; i <= endPage; i++) {
                    tag = new TagBuilder("a");
                    tag.AddCssClass("button");
                    tag.AddCssClass("ui-corner-all");
                    if (i == pagingInfo.CurrentPage) {
                        tag.AddCssClass("selected");
                    }
                    else {
                        tag.MergeAttribute("href", pageUrl(i));
                    }
                    tag.InnerHtml = i.ToString();
                    result.AppendLine(tag.ToString());
                }

                // ...
                if (pagingInfo.TotalPages - endPage > 1) {
                    tag = new TagBuilder("a");
                    tag.AddCssClass("button");
                    tag.AddCssClass("ui-corner-all");
                    tag.MergeAttribute("href", pageUrl(endPage + 1));
                    tag.InnerHtml = "...";
                    result.AppendLine(tag.ToString());
                }

                // 尾页
                tag = new TagBuilder("a");
                tag.AddCssClass("button");
                tag.AddCssClass("ui-corner-all");
                if (pagingInfo.CurrentPage == pagingInfo.TotalPages) {
                    tag.AddCssClass("selected");
                }
                else {
                    tag.MergeAttribute("href", pageUrl(pagingInfo.TotalPages));
                }
                tag.InnerHtml = pagingInfo.TotalPages.ToString();
                result.AppendLine(tag.ToString());

                // 下一页
                if (pagingInfo.CurrentPage < pagingInfo.TotalPages) {
                    tag = new TagBuilder("a");
                    tag.AddCssClass("button");
                    tag.AddCssClass("ui-corner-all");
                    tag.MergeAttribute("href", pageUrl(pagingInfo.CurrentPage + 1));
                    tag.InnerHtml = "下一页";
                    result.AppendLine(tag.ToString());
                }

                tagOuter.InnerHtml = result.ToString();
                return MvcHtmlString.Create(tagOuter.ToString());
            }
            else {
                return MvcHtmlString.Create(String.Empty);
            }
        }
    }
}